package org.example.reemploymentsys.tool;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.time.LocalDate;
import java.util.UUID;

/**
 * @Author: goudan
 * @Date: 2021/4/21 16:01
 * oss上传和下载工具类
 */
@Component
public class OssOpe {
    String endpoint ="oss-cn-chengdu.aliyuncs.com";
    String accessKeyId ="LTAI5t8B9z3Cv5H8vqBRkeh2";
    String accessKeySecret = "9ci1R5MKn6q1pW6Y4opVD8j5OulgJp";
    String bucketName = "goudan-00";
//    @Value("${aliyun.oss.file.endpoint}")
//    private String endpoint ;
//    @Value("${aliyun.oss.file.keyid}")
//    private String accessKeyId ;
//    @Value("${aliyun.oss.file.keysecret}")
//    private String accessKeySecret ;
//    @Value("${aliyun.oss.file.bucketname}")
//    private String bucketName ;
    public String uploadFileAvatar(MultipartFile file) {
        try {
            // 创建OSS实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //获取上传文件输入流
            InputStream inputStream = file.getInputStream();
            //获取文件名称
            String fileName = file.getOriginalFilename();
            //1 在文件名称里面添加随机唯一的值
            fileName = UUID.randomUUID().toString() + fileName;
            // yuy76t5rew01.jpg
            fileName = "user/avatar/"+fileName;
            //调用oss方法实现上传
            //第一个参数  Bucket名称
            //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
            //第三个参数  上传文件输入流
            ossClient.putObject(bucketName,fileName , inputStream);

            // 关闭OSSClient。
            ossClient.shutdown();

            //把上传之后文件路径返回
            //需要把上传到阿里云oss路径手动拼接出来
            //  https://edu-guli-1010.oss-cn-beijing.aliyuncs.com/01.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;
        }catch(Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 上传公共文档
     * @param file
     * @return
     */
    public String uploadFilePublicDocu(MultipartFile file) {
        try {
            // 创建OSS实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //获取上传文件输入流
            InputStream inputStream = file.getInputStream();
            //获取文件名称
            String fileName = file.getOriginalFilename();
            //1 在文件名称里面添加随机唯一的值
            fileName = UUID.randomUUID().toString() + fileName;
            // yuy76t5rew01.jpg
            fileName = "institution/"+fileName;
            //调用oss方法实现上传
            //第一个参数  Bucket名称
            //第二个参数  上传到oss文件路径和文件名称   aa/bb/1.jpg
            //第三个参数  上传文件输入流
            ossClient.putObject(bucketName,fileName , inputStream);

            // 关闭OSSClient。
            ossClient.shutdown();

            //把上传之后文件路径返回
            //需要把上传到阿里云oss路径手动拼接出来
            return "https://"+bucketName+"."+endpoint+"/"+fileName;
        }catch(Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public void deleteFile(String url) {
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            // 删除文件。key等同于ObjectName，表示删除OSS文件时需要指定包含文件名的完整路径，例如abc/efg/123.jpg。
            ossClient.deleteObject(bucketName, url);
            System.out.println(url);
            // 关闭OSSClient。
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            ossClient.shutdown();
        }
    }
}
